import store from '@/store'
import * as util from '@/utils/util'
import {
	paginate
} from '@/common/constant'

/**
 * 显示成功对话框
 */
export const showSuccess = (message, callback) => {
	uni.showToast({
		title: message,
		icon: 'success',
		mask: true,
		duration: 1500,
		success() {
			callback && callback()
		}
	})
}

/**
 * 显示失败提示框
 */
export const showError = (message, callback) => {
	uni.showModal({
		title: '友情提示',
		content: message,
		showCancel: false,
		success(res) {
			callback && callback()
		}
	})
}

/**
 * 显示纯文字提示框
 */
export const showToast = (message, duration = 1500, mask = true) => {
	uni.showToast({
		title: message, // 提示的内容
		icon: 'none',
		mask, // 是否显示透明蒙层，防止触摸穿透
		duration // 提示的延迟时间，单位毫秒，默认：1500  
	})
}

/**
 * tabBar页面路径列表 (用于链接跳转时判断)
 * tabBarLinks为常量, 无需修改
 */
export const getTabBarLinks = () => {
	const tabBarLinks = [
		'pages/index/index',
		'pages/category/index',
		'pages/cart/index',
		'pages/user/index'
	]
	return tabBarLinks
}

/**
 * 跳转到指定页面url
 * 支持tabBar页面
 * @param {string}  url   页面路径
 * @param {object}  query 页面参数
 * @param {string}  mode  跳转类型(默认navigateTo)
 */
export const navTo = (url, query = {}, mode = 'navigateTo') => {
	if (!url || url.length == 0) {
		return false
	}
	// 跳转到tabbar页面,使用switchTab
	if (util.inArray(url, getTabBarLinks())) {
		uni.switchTab({
			url: `/${ url }`
		})
		return true
	}
	
	// 生成query参数
	const queryStr = !util.isEmpty(query) ? '?' + util.urlEncode(query) : ''
	// 普通页面，使用navigateTo
	mode === 'navigateTo' && uni.navigateTo({
		url: `/${ url }${ queryStr }`
	})
	// 特殊指定, 使用redirectTo
	mode === 'redirectTo' && uni.redirectTo({
	  url: `/${url}${queryStr}`
	})
	return true
}

/**
 * 设置购物车tabbar的角标
 * 该方法只能在tabbar页面调用，其他页面调用报错
*/
export const setCartTabBadge = () => {
  // 购物车tabbar数组下标
  const cartTabbarIndex = 2
  // 获取当前购物车商品总数量
  const cartTotal = getCartTotalNum()
  if(cartTotal > 0) {
    uni.setTabBarBadge({
      index: cartTabbarIndex,
      text: `${cartTotal}`
    })
  } else {
    uni.removeTabBarBadge({
      index:cartTabbarIndex
    })
  }
  return 
}

/**
 * 获取当前购物车商品总数量
 * @param {*} value
*/
export const getCartTotalNum = (value) => {
  const cartTotal = uni.getStorageSync('cartTotalNum') || 0
  return checkLogin() ? cartTotal : 0
}

/**
 * 验证是否已经登录
*/
export const checkLogin = () => {
  // !!字符串 -> 字符串为空时为 false，字符串不为空时为 true
  return !!uni.getStorageSync('userId')
  // return !!store.getters.userId
}

/**
 * 获取默认的分页数据
 * data: [] // 列表数据
 * current_page: 1 // 当前页码
 * last_page: 1 // 最大页码
 * per_page: 15 // 每页显示条数
 * total: 0 // 总条数
*/
export const getEmptyPaginateObj = () => {
	return util.cloneObj(paginate)
}

/**
 * 加载更多列表数据
 * @param {Object} resList 新列表数据
 * @param {Object} oldList 旧列表数据
 * @param {Object} pageNo  当前页码
*/
export const getMoreListData = (resList, oldList, pageNo) => {
	// 如果当前页码是第一页，需要先清除之前叠加的数据，重新获取第一页数据
	if(pageNo == 1) oldList.data = []
	// 合并新数据
	return oldList.data.concat(resList.data)
}

/**
 * 发起支付请求
 * @param {Object} 参数
*/
export const wxPayment = (option) => {
  const options = {
    timeStamp: '',
    // 随机字符串，长度32以下，微信小程序独有
    nonceStr: '',
    // 统一下单接口返回 prepay_id, 微信小程序独有
    prepay_id: '',
    // 签名，具体签名方案见小程序支付接口文档, 微信小程序独有
    paySign: '',
    ...option
  }
  return new Promise((resolve, reject) => {
    uni.requestPayment({
      provider: 'wxpay',
      timeStamp: options.timeStamp,
      nonceStr: options.nonceStr,
      'package': `prepay_id=${options.prepay_id}`,
      signType: 'MD5',
      paySign: options.paySign,
      success: res => resolve(res),
      fail: res => reject(res)
    })
  })
}